#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

 //typedef struct ListNode* SL;
struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB) {
    // int a = 0, b = 0;
    // int cha = 0;
    // int Intersected = 0;
    // SL newheada = headA;
    // SL newheadb = headB;
    // while(newheada)
    // {
    //     newheada = newheada->next;
    //     a++;
    // }
    // while(newheadb)
    // {
    //     newheadb = newheadb->next;
    //     b++;
    // }
    // newheada = headA;
    // newheadb = headB;
    // cha = a - b;
    // if(cha > 0)
    // {
    //     while(cha--)
    //     {
    //         newheada = newheada->next;
    //     }
    // }
    // else
    // {
    //     cha = -cha;
    //     while(cha--)
    //     {
    //         newheadb = newheadb->next;
    //     }
    // }
    // newheada = headA;
    // newheadb = headB;

    // while(newheada != NULL && newheada->next != NULL && newheadb != NULL && newheadb->next != NULL)
    // {
    //     newheada = newheada->next;
    //     newheadb = newheadb->next;
    //     if(newheada = newheadb)
    //     {
    //         printf("Intersected at '%d'", newheada->val);
    //         return 0;
    //     }    
    // }
    //     printf("null");struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    if (headA == NULL || headB == NULL) {
        return NULL;
    }
    struct ListNode* pA = headA, * pB = headB;
    while (pA != pB) {
        pA = pA == NULL ? headB : pA->next;
        pB = pB == NULL ? headA : pB->next;
    }
    return pA;

}